b3

JA2 v1.13 Multiplayer

(you'll need NIV installed from now on)


Getting Started


Installing
Setting up Ja2_mp.ini

Setting the Drop Zone
Starting a Server
Connecting the Client

Hiring you Mercs
Doin' the Bobby Ray's

Starting the Battle
Placing your Mercs
Entering Tactical

Duke'in it out
The Battle Ends

Disconnecting a Server/Client

The Server Overide Functions and In-game help


The Variables of "Ja2_mp.ini"


Client Settings:

SERVER_IP
SERVER_PORT

OP_TEAM_'X'
CLIENT_NAME
SECTOR_EDGE

Server only Settings:



Developmental Comments


The Online SVN Repo

JagZilla (Bugzilla)

How Co-Op Works

Further Development

How it all Works

RakNet UDP Networking

Changes





Getting Started

Installing

If you use SVN, just update the Game Directory.     
If you do not use SVN, download the RAR-Package and extract it in your Jagged Alliance 2 root directory.

Setting up Ja2_mp.ini

Don't think you can skip this step, there's too much in here which needs independently configuring per client to achieve successfull connection and gameplay.

You will find a copy of this file with the release, this needs to go in your root Ja2 directory, along with the .exe included. It contains all the variables and parameters i have added which are convenient to change. They are read in from the file as part of starting up the Raknet Client. So if you change a setting in the file, you dont need to restart the game engine for effect, simply restart the net client. More about these variables in the following section where i detail each one.

Setting the Drop Zone

This is now the first step after starting a new game and choosing initial game option, and is only done by the server, client changes have no effect. This cannot be changed once server started/running.  

Switch to the Airspace display by either clicking on the map button or pressing the 'A' key. Then click on the 'bullseye' to select it, (which will at startup be located at secotor 9,1 "Omerta"), then place it as the agreed/desired game sector. All hired Mercs and Bobby Rays orders will now be sent there.

Starting a Server

Ok... start a new game and when presented with the map screen, press the '1' key, (it works on the numpad too). You should see some little remarks about the server starting up. If other clients cannot connect to you (the server), be sure that the selected port in ja2_mp.ini is forwarded on your router!

Connecting the Client

If you are the host you automatically connected to the server if you pressed '1'. If you aren't the host, start a new multiplayer game. The settings in the start new game screen does not matter, because you will receive the settings from the server after you connected. On strategy map screen, press the '2' key and you get connected to the server. In either situation you should see some comments about the Raknet network client starting up, and then if you have specified the right variables in Ja2_mp.ini and your network/firewall is "ok", you should make connection and see report of this from both the server and client. If you need to change a variable in your config or simply have another go at connecting, you can press the '2' key again after your attempt has been reported as failed, or kill the client/server and start it again.

Hiring you Mercs

            When all clients are connected and only then should you start hiring mercs, when the server is ready, they press the '3' key to unlock the laptop access.
Boot up your laptop and hire up-to 7 Mercs from the selections at AIM and MERC... Due to the assumed fact that their proceeding action wont be longer than a day, the default chosen contract length, delivery time and confirmation have been adjusted for ease of use.

I might also add here that this can be a good time to save the game, once all clients have hired their mercs, this way if there is a crash or some other problem or you just want to start again or play once more, you can do so quicker. Though bobby rays orders are not save at the moment, so save before placing them.

Doin' the Bobby Ray's

I just had to add this in because i could ;p ... the default destination and shipping choice have been pre-set, and there's no difference in changing them. 

The delivery is now made immediately after order, and available from the map inventory screen, without loading the level !, into your pre-located crate as specified in the config file. Further orders can be made mid game. Note i've changed the defualt game options to gives the best bobby rays selection, this is great, unless you want it otherwise.

Starting the Battle

When all clients have followed the above steps and are ready for battle, from the map screen, press the '3' key. When all clients are ready, this will load the level and launch the "Tactical Placement GUI", as known by the overhead map view of the sector, allowing placement of Mercs along allocated edge space once all clients are loaded.

Placing your Mercs

When all clients are loaded you can begin. *Be carefull if for some reason you will be placing opposed mercs along the same edge or at a corner where they may be in immediate sighting range of another clients enemy merc edge, you will probably have problems, as the code doesn't like starting the battle (going into tactical) and going straight into turnbased mode when all clients aren't in tactical yet, ie still in placement mode.

Entering Tactical

When all clients have finished with their merc placement and are ready, all can selet "Done". This will set you as "ready" unless you cancel, and when all are ready it will go into what is called "Tactical View". It will start in realtime until the the first opposed sighting is made at which time it changes to turn-based mode. The game can also switch back to realtime if each clients have not seen each other for some turns.

Duke'in it out

Let me break it to you now so as to dash those hopes you had of experiencing the full spectrum of intricacy and complexity afforded by the Ja2 engine but in Multiplayer...

Very little of the combat components have been implemented at this stage... here is the list of what is sent across the network and as such justifies allowed gameplay manouvers:

** moving your mercs on the ground level, ** changing stance between standing, crouching, and prone, ** changing facing direction,  ** firing a gun, ** bullet damages and ** stopping a merc apon spotting new enemy...

I might also mention that ** knife damages, ** punch damages, ** and burst fire damages are implemented, however the animations are not. This leaves pretty much all the rest of the fun un-implemented, so agree to avoid it to save confusion and invalid battle actions, for example, roofs, med packs,  and grenades etc. etc.

The Battle Ends

Once all but one team is left we have a winner, and you will either be presented with notification of defeat or, be returned to realtime and as such become the winner / survivor.
From here im not sure whatis possible, you could obviously start a new game, but you could also try hiring more mercs and gear, which will be delivered automatically. Perhaps even the survivor could walk to another sector, and those defeated, hiring more weapons and mercs could change their destination sector. Though it hasnt been tested...

Disconnecting a Server/Client

By pressing the '4' key, from the Tactical (map) view, the server and client process's if running will be disconnected and 'killed', reseting parameters relating to status of connection.

The Server Overide Functions and In-game help

Now's a good time to mention some new features, one is the Server Overide Function, bound to the key '7', which can be used by the server to bypass any of the mod's 4 launch checkpoints. There is also a small help display bound to 'F1' and 'F2' if you forget your  keys..., oh, there is also bound to '5' a script to show mouse grid coordinates.

The server can now also Manually end another players turn (or if in realtime, start turnbased action) with 'Alt+E'.

As well the server can "kick" a player with 'Alt+K'. This removes all copies of that clients mercs throughout the network , causing there turn to be skipped, but leaving them connected to spectate.


The Variables of "Ja2_mp.ini"


Client Settings: (set all on all):

This is the IP addess that your client will connect to. You can use "127.0.0.1" if you are the host.
If you are not the host you have to enter the external IP address of the server. The server can look at www.whatismyip.com to get the external
IP address.    
Don't forget the "quotation" marks. This doesnt need to be set if you are the server.
The port that the server and client will connect through, best if not used by other apps and isnt blocked by a firewall, router etc. > 6000 is best, set it the same on all machines and it doesnt need to be writting in "quotation" marks as don't the rest of the variables.
If other clients cannot connect to your server, be sure that this port is forwarded on your router!
Pick a team number, if its the same as another clients, you will be allied while Teams are allowed by server.
This can be upto 30 'char' characters. make sure to keep the "quotation" marks around it ! ie "hayden"

Choose between 0 and 3, to set your starting sector edge (ubStrategicInsertionCode) , 0=North, 2=East, 1=South, and 3=West.

Server Only Settings: (no effect on client only game):

            This can't be made higher than 4 (for the games sake), but lower is ok. Best to set this to the expected number of clients to allow for proper game launch    
         check progressions....
           Number of mercs hireable by each player, Maximum for this mod is 7.  6 is good as that is the squad limit (though you can have more than one sqaud.)
Originally 'net_divisor' it is now the factor, and can handle decimal value (float), eg 0.5 = half, 0.3333 = third, 2 = double.
The Starting balance for all clients set in dollars without the $ sign.
Game starting time. (FLOAT). The values are in hours (0.5 = 1/2 hour). Default value is 7 (7am), ie 13.5 = 1:30pm
A divisor of how much time each client has for its turn. Default = 100, less = more time.
10 = 43 seconds, 15 = 28s, 20 = 22, 25 = 19s, 50 = 17s, 100 = 15s, *with only cliff, fresh on 22 ap's*.

Enable or disable the hiring of the same merc by more than one client... 

If should report the Name of remotely hired mercs.

0 = All vs All only, 1= Team's Allowed, (as per client TEAM variable lsited above), 2 = Only Co-Op (coop not still working)

1 = true, 0 = false.
1 = true, 0 = false.
This as with the following 3 options can now be set to 0 or 1, to enable or disable the spawning of the respetive AI faction. The clients never generate anything themselves, just spawn what is passed to them from the server to make sure all players have same AI. The AI is only controlled/running on the server game. Actions are from ther sent out.

These options are now only server side, and need only be set in its .ini
Leave creature disabled as thier team size was reduced to 1 from 32 to make room for LAN players... 
0 = disable, 1 = enable.
0 = disable, 1 = enable.
when 1, enables cheat function bound to '9', containing helpfull testing function, show all mercs, though i believe it makes getting an interrupt harder....
Enable or Disable Morale Changes during battle.
 An array of items to be given to each merc hired at the start of the game, repeat a item number for more than 1 each item can not have number of digits greater than 4, is <=9999, total length for this string is 100, including brackets and commas, and no more than 20 items int total. these can be adjusted apon request
examples: 201=first aid, 214=canteen, 199=comp binoc's, 222=energy boost (aka stim pack), 235=regen boost, 300=light knife, 49=knuckle dusters.
look in items.xml for full list, of coarse this is also limited to mercs inc capactiy.
Also note that right now they are not added to replicants, so they wont be dropped by killed mercs other than your own.

Developmental Comments


The Online SVN Repo

    Thanks to the forward help of  lalienxx at the Bear's Bit i have some SVN space where you can get the source code as i update it using an SVN client such as TortoiseSVN. I'm open to contributions, i currently am running Visual Studio 2005 express.

JagZilla (Bugzilla)     Thanks to the forward help of JAPH at the Bear's Bit we have a bugzilla space where you can post you comments, requests and bugs without them getting lost in the forums, plus you get tracking and it new ... ;)
        http://ja2.discusrock.org/bugzilla/

How Co-Op Doesnt works (well not that well, right now...)

     If it does... (you'll have to get back to me on that)
                I seems to have nutted out the problem stopping my initial sometimes working attempt from working all the time. it was that the Inv array part of the Merc Create struct , which is a class and not that simple, was getting mangled through the RPC call, so i fixed it by pulling out the inventory items into a dedicated struct to hold them and the old struct, passing this, and then at the other end (the recieve) a new create merc struct is initiated, and filled with values from the old struct, (the bits that pass through ok), and the pulled out inventory items passed through "outside" with it.

    It seems to work out, so let me know if you have any experience to comment on. The AI components are now set server side only. And are sent out when the server creates them, which is generally after going from the tactical placement gui, into the tactical "action" view.

Current Development

     Currently we have RoWa21 from the boards coding some changes ! He's helped allready by mergin my oringinal code with thet latest 1.13 and NIV, he will also be helping with other coding areas. this being said theres plenty to be done and more help would be good. hopefully we can get coop working and the basic combat and movement systems working and synchronized effectively.

    You can contact me ( haydent ) through the Bear Pit's Forum

               http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=165740&page=1


How it all Works

(well some of it)     Maybe you dont want to get your head under the bonet and into the code itself just yet but are just interested to know how i went about certain things, here's a brief run down.

    Well firslty i hope it does work, atleast some for you, ive barely play tested, just loading it up on my spare computer which is a laptop with no screen and a damaged faulty monitor output plug, enough though that i could test my code worked, but iver christmas i hope to test it further, perhaps you can to and give some feedback.

    Aside from the Initial Server and Client components which i transfered and modified from a "Chat Example" project that comes with RakNet. I used a function of RakNet called RPC or Remote Procedure Calls to send and recieve my communication. This is easy as it avoid having to package my data into packets, send it, then open it at the other end and work out what to do with it. An RPC function simply executes the function specified on the other specified remote clients, in this case all but the sender.

    The server computer lets each client/side know when its there turn and the clients tell the server when they've finished they're's. When a client give the fire weapon order, an inital command is sent out to all the other clients telling them to do the same. Except when the other clients get to the bit of code which applies the hit and damage, if the command came from another Client they stop. Then when the Original client works out the hit damage taking into consideration random factors, and if it happened, and sends it out to all the other clients which then apply it hopefully in time to make it all seem connected.... You will notice wont short-coming of this, is that a client having recieved an order to replicate a weapon firing, may do so, but calculate that this particaular shot is going to miss, and such show the difference in arc for the bullet animation to miss, but just as you see the bullet whizzing past your head, you recieve the second command from the attacking client (the one which has the bullet hitting and it's damages) ... this is then applied and your on half health after breathing what was in this case, a too eager sigh of relief ... and the same example vice versa .

    As for the few other implemented commands, the are pretty simple and straight forward...

    So much of the time i've been looking through the code and i would find things that were almost perfectly set up for multiplayer and often not used at all, there was a definate effort by the original creators and they came close in my opinion... id love to know what stopped them... ?

     Now another of the new systems implemented is the 4 new LAN teams (bteam: 6, 7, 8, and 9). How i did this was to have 4 new teams, 1 for wach client, max at 4. when client 1 hires a merc for example it is sent out and spawned on the other clients in team 6. client 2 in 7, client 3 in 8 and 4 in 9. The server (client 1) handles the team order and sends the command to each client to start any particualr teams turn, including the AI. There are a set number range of ubID's for each team: 6(client 1, the server) is 120 to 126 (7 members), on any client, their own mercs take slots 0 through 19 team 0, but when a client sends out a new move for example, the merc's ID (ubID) is prefixed (added) with a corresponding number to their client number (netbTeam) to match it with the network spawned merc copies in the other games. for example any clients first merc will be ubID 0 and team 0, if its client 1 (server) a prefix of 120 is added on to make its ubID 120 which is the first clot for team 6 which is used to hold the "copies" of client 1's team remotely. if its client 2, the prefix is 127, and so on... i hope this makes things clearer ;)

    The interupts are working again for what i have tested... and are only calculated by the merc (and owners computer) that is moving because they have the most up-to date info regarding merc (namely theirs) positions.

RakNet UDP Networking

    If your interested in more information on the free C++ UDP based network library used in this project follow this link for where there is a forum, doxygen manual and you can download it yourself.
        http://www.rakkarsoft.com/

Changes:


b3 -- Well i cant even remeber everything i did today...
* menu changed (MP has its own save game directory)
* bonus added towards interrupt if your has his weapon ready
* various message tweaks
*  Interrupt fix
 and some more...
b2 -- you can now return to real time if all active lan teams request so within one round of turns
NIV actually was working, it just doesnt operate @ 640 res. ;)
b1 -- lots of help has brough about some further progress !

no more interupt lockups
interrupt reworkng
updated source to include NIV 
other changes: save in turnbased when not turn, stay in game after death,  etc etc

this is initial intermediatary release, just to put something playable out there again...

still needs more work on sync and interrutps etc etc.
rev. 02022008 --
(prebeta post final)
I realised i got my exe's mixed up after doing some 3 player LAN testing today :), and for the last few releases theres been some test code in there that would have been making it not play well and wasnt meant to be in there... so while i was at it again i have made some other quick fixes :

* removed test code that shouldn't have been released (causing among other things blue 'update' text and sliding merc movement)

* fixed loss of UI lock during interrupt fter being shot at

* removed some 'non-ready' MERC profiles

* fixed new MERC profiles tactical selection and face animation

* disabled roof climbing (temp)

* prevented 3-sec pausing of repo merc movement apon it being spotted by your merc
rev. 28012008 --
(prebeta final)  
   This is just adding the prerelease changes. nothing new. This is the final pre-beta, after this it will be beta and feature hopefully a upgraded network synch system. this will however require more bandwidth than before, (~ 2kbs/client) , but i think its worth it even though it will make playing any version past this over dialup obsolete. Hopefully it will open up the way for further un-implemeted game state synchro on a more regular basis.

* fixed door ani los issue/bug

* fixed bobby rays crash

* synced up bandage health levels

* added ~15 new game mercs to MERC

* synced up doors!

* synced up burst fire sounds

* fixed death messaging

* re-enabled intterupts

* allowed disabling of hired name display

* started using a dvorak keyboard

* enabled the rest of the MERC bios

* added begining kit bag loadout, an array in the ini for free stuff !

* disabled medical deposit costs

* enabled the disabling of morale events

* server can now manually end a clients turn or start a clients turn in realtime or turnbased (bound to 'Alt+E'), making the previous ini setting and command 'START_TEAM_TURN' obsolete .

* removed the ini setting for testing interrupts now they are happening.

* there is no more bobby rays crate (for now), items are dumped in the middle of the sector.

* fixed crash from death animation being tried to apply to allready dead soldier

* disabled death messaging

* Interrrupt syncronisation of interupted merc's location apon being interrupted

* Kicking/Removal of a Clients team of Mercs, bound to 'Alt+K' (this doesnt disconnect the client, allowing them to spectate)
rev. 17012008 --  ok , not alot of changes but some that will hopefully rectify a few of the main issues popping up during testing so far... unfortuanately/fortunately this is just a cheap hack/fix and a pretty raw solution, but ive ended going with it for now as it is quick, it is accurate, and by the process of getting this far i have learnt more that i can use later to upgrade or re-implement systems of synchronisation. ie Dont get upset if it seems ive just patched some problems only to create some more, (which may be the case as ive felt before), the aim is that this is atleast a more evenly playable variant than before.

* there is now a regular update sent out about every 2 seconds by the owner of each merc with stats on location, health and breath, this should help with the related issues.

* when you assign a new destination for your merc, the calculated path is now sent out as well as the destination grid, as to your mercs location. this way all merc replications start their path from the same grid and follow the same path. (though fences "work", they have not been refined)

* There is a grid movement synchronisation system akin to what is known as "lock-step" synchronisation, where no merc can advance further than the current grid with out all the other replications of themselves being ready to do so as well. How i got this to run smoothly and avoid the pause between the time of arrival, sending out such, awaiting all others to do so, recieving the go-ahead and continuing, is by requesting the sector in advance. So it is all happening in the background while traversing a grid, and if all are in sync and ready, the next grid is moved onto seemlesly ("nearly"), depending on ping... :)

* stop commands are now synched further, such that when it is sent out it also contains and thus applies the settings of position and direction so all replications are stopped in the same grid.

* The main Game engine no-longer automatically pauses game play while the Main Game Window is not selected (or backgrounded/minimized). i havent got as far as blocking game pausing altogether, but this will enable you to chat in irc etc. while the game keeps running and updating graphics happily including network traffic. Due to this the implementation of a chat system has been relegated in rank of things to do as irc is an excellent system and the few times ive used it in my experience ive been rather impressed. This too along with the fact that the implementation of a chat system would hinder game play and game display more than using irc itself, thus potentially bringing up further problems. You can quit easily fit a windowed game of ja2 at 1024 along side a resized small window of irc with todays standard 1280 res, but if you ahve an extra monitor your set ;)

* I also fixed a problem which im not sure when or if it had come up before, where the servers mercs were being autoplaced apon ui unlock without selecting so.

* Also im now back to distibuting debug exe builds, as after packing it isnt much size difference, and by running a debug exe you get a few more stats on errors and such, and it is further tested, by the community which i owe a big thankyou to for the feedback so far both through the forum thread and the ja2 1.13 jagzilla bugzilla bug tracking site.

* I also disabled a mercs reproduction checking for enough AP's before making moves etc, as this is calculated by the owners game instance and results applied from there.

All these updates should work just and well (and have been slightly tested so) to work with both real-time and turnbased.

Happily all this synchronisation hasnt increased network traffic much at all and it still quite happily trots along at under 1kb/s in idle tactical view.

Please report any problems you have as i rely on this mostly, due to any spare time i have being spent on resting and doing other things than coding, leaving little time for testing than that is necessary to check my changes "work" atleast...

regards,

Hayden.

rev. 11012008 -- * disabled hourly updates - causing breath loss on insertion on clients pc, but not happening on remote merc duplicates, leading to unsync due to differing ani speeds. this will have been accounting alot for some of why one merc has been faining while the other still standing... this is big fix, you stil will get "slight unsyncs" (a few grids), so someday i will still implement actualy updating of merc params and traversal. (as there is atleast a small delay between when your werc starts running and your merc replication starts running, throwing things like interrupts and first time spots out of allignment between pc')

* There was also some code which made enemy mercs anispeed different to a player's (now overidden)

* coop discription in documentation fixed, (was around the wrong way)

* something i forgot to mention last time, you can now load game from tactical placement gui, rather than only being able to quit game.

* new spectator mode enabled once you are wiped out :)

* fixed up death sends, to not create unkillable merc...

* added in cheat testing function to the ini, to enalble showing of all mercs to enable testing
 
* fixed panel shading while in opponent turn

* fixed another possible unsyncer of a problem, where a client replicating a mercs move would pause the merc when it spotted another enemy merc (possibly there's) even though the merc being moved wasnt in their control and was a replication... so now only stops if ordered from moving owner...
 
* added manual start for turn based mode, if the server want to start off a team straight up without realtime, might be handy for testing...

* add clients specified names to the turn title bar :)

* there will be still slight out of sync until proper game clock animation syncing between clients is implemented...

* fixed a bug brought on by the  screen locking function i started using, (to enable moving screen while not turn). prob was it wasnt unlocking prop for interrupts, so that is fixed now.

* fixed a bug where interupt timed turn was going too quick as to the turn after that. its a quick hack that makes it the same time as you get for a "normal" turn... i cant figure out any better right now.

* first time using release build rather than debug, if you have issues let me know and i can revert
rev. 08012008 -- We got quite a few good ones here... (where to start hmmm...)
* You can now move your screen around while its not your turn.
* The bottom right mini 'radar' map view of the selected sector from map view screen is now always active so you can see preview before play.
* Bullet trajectory is now replicated, and follows same path on clients as on senders, as to synced are bullet hits, bullet misses, bullet hit structures and bullet hit windows.
* Death's are networked as is the info relating to such, ie killer and team numbers..
* more INI parameters: ability to specify alliances and factions, to enable 2v2 or 1v3, and the specification of a Player name.
* We got a bugzilla at http://ja2.discusrock.org/bugzilla/
* When all your mercs are killed you stay in the game, especially good for server to avoid droppouts for remaining players.
* Interrupts work, (they did before but they do now for real...)
* Change of state is replicated, ie blasted away, shrugging, animations
* Dont expect anything from coop, i havent looked at it yet...
rev. 02012008 -- A heap more requested change additions:
* Timed Player Turns is now an option again, and the time allowed is adjustable from the ini ! (TIMED_TURN_SECS_PER_TICK)
* More externalised ini server variables: MAX_MERCS, STARTING_BALANCE, TIMED_TURN_SECS_PER_TICK, DISABLE_BOBBY_RAYS, DISABLE_AIM_AND_MERC_EQUIP
* M.E.R.C. hires now incur nominated daily salary apon hire.
* All Game Options Screen choices are now only taken into effect by the server, and sent to the clients from there...
*  1 day contract length for AIM is now only option
rev. 02012008 -- Quite alot of new changes:  
* Bobby rays order are now delivered straight away into your sector, and can be accessed before loading level, to allow time to dish out weaps befroe match...
* There is now a 4 step, staged launching system with "ready" check points at: all clients connected, all clients ready for load, all clients loaded, and all clients placed and ready for battle... there is also a manual server overide feature is someone drops or goes to sleep...
* All the server settings are now set only by the servers ini and sent out to the clients apon connection, including the dropzone, which needs to be set before starting the server.
(there is however a small bug where a client (not the server) cant load a saved game made once in tactical...)
rev. 31122007  -- We now have slightly tested Interrupt system working. Tested only so far with 2 players in Deathmatch, no AI. Needs for testing and no doubt modification...
it has new ini setting: "INTERRUPTS" to disable, enable and always (extreme for testing) it.
The old "NET_DIVISOR" is now "DAMAGE_MULIPLIER" and is "decimal" (float), so 0.5 = half damage, 2 = double.
Added basic in game help display
rev. 30122007 --  CoOp has been fixed ... AI is now propogated to the clients where spawned, though only slightly tested, also added new dev notes on lan team turn implementation and coop. also i forgot to mention the grid coordinate display script bound to key '5' was fixed last release, as the X and Y where around the wrong way. Interupts are on their way.
rev. 24122007 -- bug fixes: disabled interrupts to avoid lock-up, fixed crash bug of clicking in "hashed" area while in tact place gui.
rev. 22122007 -- small adjustment to fix team 4 being treated as PLAYER_PLAN member and getting a green shader ! , there are now 7 slots per LAN team, but 1 creature and 1 player_plan.
rev. 21122007 -- initial pre beta release


:)
Page Created with NVU

eof